home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / deq.doc < prev    next >
Text File  |  1995-03-31  |  8KB  |  199 lines

  1. Author: Frank Plate 
  2. Subj:   solving differential equations 
  3. Date: 1 April 1992 
  4.  
  5. [Note: received by mail on a floppy.  Thanx, Frank!  -jkh-] 
  6.  
  7. This program solves every common differential equation and system 
  8.    (every potential and degree also with variable coefficients) 
  9.          on repetitive use of the Runge-Kutta-algorithm. 
  10.  
  11.  
  12. * Attention :  
  13.       Éííííííííííííííííííííííííííííííííííííííííííííííííííííííííí»  
  14.       º  - avoid discontinuity on the sampled x-range !         º 
  15.       º  - periodic functions require stepsize << one period!   º 
  16.       èííííííííííííííííííííííííííííííííííííííííííííííííííííííííí¼  
  17.  
  18. * It generates the following variables : 
  19.          - 'degree' 
  20.          - 'functions'    ( list of a deq-system ) 
  21.          - 'initvalues' 
  22.          - 'xmax' 'xmin'  
  23.          - 'h'            ( stepsize ) 
  24.  
  25. * y0 in this program equals y, y1 equals y', y2 equals y'' ect.   
  26.                 
  27. * The progam is controlled by menu and will take the value of the last 
  28.   calculation when invalid or no input-data is entered at any step. 
  29.   
  30. * the result can be found in äDAT :              
  31.                       x  y  y'  y''  y''' ...  
  32.         1. values [[                         ] 
  33.         2. values  [                         ] 
  34.             ....               ... 
  35.                    [                         ]] 
  36.  
  37. * As result the second column of äDAT ( = y(x) ) is drawn.   
  38.   y', y'' etc. can be plotted by changing YCOL. 
  39.  
  40.  
  41.  
  42.                        Éííííííííííííííííííííí» 
  43.                        º     Example #1 :    º 
  44.                        èííííííííííííííííííííí¼ 
  45. -------------------------------------------------------------------------                                                                       
  46.  
  47. deq:      y'' = -y' - 1.25 * y           3    y (3/2*~a)=1                    
  48.                                          3    y'(3/2*~a)=0                    
  49.                                           
  50. solution: y = e^(0.25*(3*~a-2*x)) * ( 0.5*cos(x) - sin(x) ) 
  51.  
  52. ------------------------------------------------------------------------- 
  53.  
  54. - press "DEQ" 
  55. - enter 2 when asked for degree 
  56. - enter highest derivative :          :ëX(Y1)=Y2: '-Y1-1.25*Y0'  
  57.  
  58.   in 'functions' stored    :        { :ëX(Y0):    'Y1'  
  59.                                       :ëX(Y1)=Y2: '-Y1-1.25*Y0' } 
  60.  
  61. - enter initial values     :          :   x0 : '3/2*~a' 
  62.                                       :Y0(x0): 1   
  63.                                       :Y1(x0): 0 
  64.  
  65.   stored in 'initvalues'   :          [ 4.71238898038 1 0 ] 
  66.  
  67. - enter x-range            :          :xmin: 0 
  68.                                       :xmax: '2*~a' 
  69.  
  70. - enter stepsize           :            '~a/4' 
  71.  
  72.  
  73.  
  74.  
  75.  
  76.                        Éííííííííííííííííííííí» 
  77.                        º     Example #2 :    º 
  78.                        èííííííííííííííííííííí¼ 
  79. -------------------------------------------------------------------------- 
  80.  
  81. deq:        y''= ( 2 / y ) * (y')'y - ( 2 / x ) * y'   3   y (1) = 1 
  82.                                                       3   y'(1) = 0.5 
  83. solution :  y  = 2 * x / ( 1 + x ) 
  84.  
  85. -------------------------------------------------------------------------- 
  86.  
  87. - press "DEQ" 
  88. - degree : 2 
  89. - enter the highest derivative :      :ëX(Y1)=Y2: '2/Y0*Y1^2-2/X*Y1' 
  90.  
  91.   stored in 'functions'        :    { :ëX(Y0):    'Y1' 
  92.                                       :ëX(Y1)=Y2: '2/Y0*Y1^2-2/X*Y1'  } 
  93.  
  94. - enter initial values         :      :   x0 : 1 
  95.                                       :Y0(x0): 1   
  96.                                       :Y1(x0): 0.5 
  97.  
  98.   stored in 'initvalues'       :      [ 1  1  0.5 ] 
  99.  
  100. - enter x-range                :      :xmin: 0 
  101.                                       :xmax: 5 
  102.  
  103. - enter stepsize               :       1.1 
  104.  
  105.  
  106. see what's happening when you change the x-range : 
  107.  
  108. - press "DEQ" 
  109. - press "ENTER" three times 
  110.   ( 'degree' 'functions' 'initvalues' remain unchanged ) 
  111.  
  112. - enter x-range :                     :xmin: -2 
  113.                                       :xmax: 3 
  114.  
  115. - press "ENTER" ( leave 'h' unchanged )  
  116.  
  117. Calculated values are quite accurate untill the program passes the  
  118. discontinuity x = -1. Values beyond x = -1 are calculated and stored in  
  119. äDAT but are not correct anymore.  
  120.  
  121.  
  122. If you now change stepsize 'h' to 0.5 you'll get in stack: 
  123.   1: program killed: "infinite result"    and stuff in other levels. 
  124. This error is caused by y'' when y-values for x = 0 were calculated.  
  125. But values already stored in äDAT are correct. 
  126.  
  127.  
  128.  
  129.  
  130.                        Éííííííííííííííííííííí» 
  131.                        º     Example #3 :    º 
  132.                        èííííííííííííííííííííí¼ 
  133. ------------------------------------------------------------------------- 
  134. deq-system :    u''(t) = -v'(t)        3     u(0)  = 0  ;   u'(0) = 1 
  135.                 v''(t) = 4 * u'(t)     3     v(0)  = 0  ;   v'(0) = 0 
  136. solution :      u(t) = 0.5 * sin(2*t) 
  137.                 v(t) = 1 - cos(2*t) 
  138. ------------------------------------------------------------------------- 
  139.  
  140. substitution for the program :   
  141.   Replace all functions except the derivatives of highest degree. 
  142.                       t   ->    X               
  143.                    u (t)  ->   Y0 
  144.                    u'(t)  ->   Y1 
  145.                    v (t)  ->   Y2 
  146.                    v'(t)  ->   Y3 
  147.   with these new variables you get : 
  148.   original deq-system         3  new deq-system for calculator 
  149.   ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 
  150.   ët(u)  =  u'                3        ëX (Y0) =      Y1 
  151.   ët(u') =  u'' =   - v'      3        ëX (Y1) =    - Y3 
  152.   ët(v)  =  v'                3        ëX (Y2) =      Y3 
  153.   ët(v') =  v'' = 4 * u'      3        ëX (Y3) =  4 * Y1                                                   
  154.                 
  155.  
  156. - press "DEQ" 
  157. - degree = 4 
  158.  
  159. - enter the deq-system :              :ëX(Y3)=Y4: '4*Y1' 
  160.                                       :ëX(Y2)   : 'Y3' 
  161.      ( use PgDn )                     :ëX(Y1)   : '-Y3' 
  162.                                       :ëX(Y0)   : 'Y1' 
  163.    
  164. - enter initial values :              :   x0 : 0 
  165.                                       :Y0(x0): 0   
  166.      ( use PgDn )                     :Y1(x0): 1   
  167.                                       :Y2(x0): 0   
  168.                                       :Y3(x0): 0   
  169.  
  170. - enter x-range        :              :xmin: 0 
  171.                                       :xmax: '~a' 
  172.  
  173. - enter stepsize       :               '~a/10' 
  174.  
  175. u(t) is plotted at the end of the program and v(t) can be found in 
  176. column 4 of äDAT. 
  177.  
  178.  
  179.  
  180. ********************************************************************** 
  181.  
  182. As I've got only some of the GOODIES disks I don't know if someone has 
  183. already written a similar program.  [Note: See also DIFFEQ on Goodies 
  184. Disk #1 for another programmer's approach to differential equations. 
  185. -jkh-] 
  186.  
  187. Although I didn't take much time to speed up the program I hope it 
  188. can be useful to someone. Don't forget this is only a numerical 
  189. guess process and therefore only useful to control the manually 
  190. calculated result  ( how to find out discontinuities or periodic 
  191. times before getting to know y(x) ??). But nonsymbolic results can 
  192. be calculated with any run-of-the-mill calculator as well. 
  193.  
  194. Frank Plate 
  195. Im Hachegrund 3a 
  196. 2808 Syke 
  197. Germany - W 
  198.  
  199.